﻿Imports Testeitor.Entidades
Imports System.Data.SqlClient

Public Class SuiteDAO
    Inherits DAOBase

    Public Overrides Function CargarEntidad(ByVal reader As System.Data.IDataReader, ByRef stack As Stack(Of Integer)) As Entidades.EntityBase
        Dim entidad As New SuiteEntity

        Dim temp As Object
        'Campo Id
        entidad.Id = Convert.ToInt32(reader("id"))
        'Resto de los campos
        temp = reader("detalle")
        If temp.Equals(DBNull.Value) Then
            entidad.Detalle = String.Empty
        Else
            entidad.Detalle = Convert.ToString(reader("detalle"))
        End If

        temp = reader("fechaCreacion")
        If temp.Equals(DBNull.Value) Then
            entidad.FechaCreacion = Date.Today
        Else
            entidad.FechaCreacion = Convert.ToDateTime(reader("fechaCreacion"))
        End If

        temp = reader("tags")
        If temp.Equals(DBNull.Value) Then
            entidad.Tags = String.Empty
        Else
            entidad.Tags = Convert.ToString(reader("tags"))
        End If

        temp = reader("estado_id")
        If temp.Equals(DBNull.Value) Then
            entidad.Estado = New EstadoEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("estado_id"))
            stack.Push(index)
        End If

        temp = reader("autor_id")
        If temp.Equals(DBNull.Value) Then
            entidad.Autor = New UsuarioEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("autor_id"))
            stack.Push(index)
        End If

        CargarEntidad = entidad
    End Function

    Public Overrides Sub CargarRelacion(ByRef entidad As Entidades.EntityBase, ByRef stack As Stack(Of Integer))

        Dim tempDAO2 As New UsuarioDAO
        Dim tempEntity2 As UsuarioEntity
        tempEntity2 = tempDAO2.Seleccionar(stack.Pop)
        DirectCast(entidad, SuiteEntity).Autor = tempEntity2

        Dim tempDAO As New EstadoDAO
        Dim tempEntity As EstadoEntity
        tempEntity = tempDAO.Seleccionar(stack.Pop)
        DirectCast(entidad, SuiteEntity).Estado = tempEntity

    End Sub

    Public Overrides Function commandActualizar(ByRef ent As Entidades.EntityBase) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("UPDATE Suite SET detalle = @detalle, fechaCreacion = @fechaCreacion," + _
        " tags = @tags, estado_id = @estado_id, autor_id = @autor_id WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@detalle", DirectCast(ent, SuiteEntity).Detalle))
        cmd.Parameters.Add(New SqlParameter("@fechaCreacion", DirectCast(ent, SuiteEntity).FechaCreacion))
        cmd.Parameters.Add(New SqlParameter("@tags", DirectCast(ent, SuiteEntity).Tags))
        cmd.Parameters.Add(New SqlParameter("@estado_id", DirectCast(ent, SuiteEntity).Estado.Id))
        cmd.Parameters.Add(New SqlParameter("@autor_id", DirectCast(ent, SuiteEntity).Autor.Id))
        cmd.Parameters.Add(New SqlParameter("@id", ent.Id))

        commandActualizar = cmd
    End Function

    Public Overrides Function commandEliminar(ByVal id As Integer) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("DELETE FROM Suite WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@id", id))

        commandEliminar = cmd
    End Function

    Public Overrides Function commandInsertar(ByRef ent As Entidades.EntityBase) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("INSERT INTO Suite VALUES(@detalle, @fechaCreacion, @tags, @estado_id, @autor_id)")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@detalle", DirectCast(ent, SuiteEntity).Detalle))
        cmd.Parameters.Add(New SqlParameter("@fechaCreacion", DirectCast(ent, SuiteEntity).FechaCreacion))
        cmd.Parameters.Add(New SqlParameter("@tags", DirectCast(ent, SuiteEntity).Tags))
        cmd.Parameters.Add(New SqlParameter("@estado_id", DirectCast(ent, SuiteEntity).Estado.Id))
        cmd.Parameters.Add(New SqlParameter("@autor_id", DirectCast(ent, SuiteEntity).Autor.Id))

        commandInsertar = cmd
    End Function

    Public Overrides Function commandSeleccionar(ByVal id As Integer) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM Suite WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@id", id))

        commandSeleccionar = cmd
    End Function

    Public Overrides Function commandSeleccionarWhere(ByVal where As String) As SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM Suite WHERE " + where)
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@where", where))
        commandSeleccionarWhere = cmd
    End Function

    Public Overrides Function commandSeleccionarTodas() As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM Suite")

        commandSeleccionarTodas = cmd
    End Function
End Class
